/**
 * 
 */
package kr.pe.johnkim.dayve.activity;

import java.io.IOException;
import java.util.Calendar;

import org.json.JSONException;

import kr.pe.johnkim.dayve.provider.DayveLog;
import kr.pe.johnkim.dayve.provider.DayveMember;
import kr.pe.johnkim.dayve.rest.DayveMemberRest;
import kr.pe.johnkim.dayve.rest.DayveCommonRest;
import kr.pe.johnkim.dayve.util.DayveCommon;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * My History 새로운 사용자로 등록하는 화면 클래스이다.
 * 
 * @author johnkim
 *
 */
public class DayveSignupView extends Activity {

	public static String TAG = DayveSignupView.class.getSimpleName();
	
	ProgressBar mDayveProgressbar;
	
	Button btnSignupEnter;
	Button btnSignupCancel;
	Button btnCheckDuplication;
	Button btnSignupDatePicker;
	
	EditText edtTxtSignupId;
	EditText edtTxtSignupPassword1;
	EditText edtTxtSignupPassword2;
	EditText edtTxtSignupEmail;
	
	Spinner spnSignupSex;
	
	TextView txtViewSignupBirthday;
	
	private String signupId;
	private String signupPassword1;
	private String signupPassword2;
	
	// 현재 시간.
	private static String currentDate;
	
	DayveCommonRest dayveCommonRest = new DayveCommonRest();
	DayveMemberRest dayveMemberRest = new DayveMemberRest();
	DayveCommon dayveCommon = new DayveCommon();
	
	// id 중복 검사를 한다.
	private static final int THREAD_CHECK_DUPLICATION = 100;
	// 사용자를 등록 한다.
	private static final int THREAD_REGISTER_MEMBER = 101;
	// 로그를 저장한다.
	private static final int THREAD_INSERT_LOG = 102;
	// 프로그래스 바를 출력 한다.
	private static final int THREAD_PROGRESS_BAR_VISIBLE = 103;
	// 프로그래스 바를 감춘다.
	private static final int THREAD_PROGRESS_BAR_INVISIBLE = 104;
	// 중복 검사 성공 후 사용가능 id 다이얼로그 창을 띄운다.
	private static final int THREAD_DIALOG_CHECK_DUPLICATION_SUCCESS = 105;
	// 중복 검사 성공 후 이미 등록된 id 다이얼로그 창을 띄운다.
	private static final int THREAD_DIALOG_CHECK_DUPLICATION_FAIL = 106;
	// 중복 검사 오류발생(통신장애 또는 실행 오류) 다이얼로그 창을 띄운다.
	private static final int THREAD_DIALOG_CHECK_DUPLICATION_OTHERS = 107;
	// 사용자 등록 실패 다이얼로그 창을 띄운다.
	private static final int THREAD_DIALOG_REGISTER_MEMBER_FAIL = 108;
	// 사용자 등록 성공 토스트를 띄운다.
	private static final int THREAD_DIALOG_SUCCESS_TOAST = 109;
	// id
	private String DAYVE_ID = "";
	// password
	private String DAYVE_PASSWORD = "";
	
	// id 중복 체크 결과.(0 or 1 or null)
	private String RESULT_CHECK_DUPLICATION = "";
	
	// 사용자 등록 결과.(SUCCESS or FAIL or null)
	private String RESULT_REGISTER_MEMBER = "";
	
	// 설정 파일을 가져 온다.
	private String myPreference = "kr.pe.johnkim.dayve.activity_preferences";
	
	// 성별.
	private String SEX = "";
	
	// 생년월일.
	private String BIRTHDAY_YEAR = "";
	private String BIRTHDAY_MONTH = "";
	private String BIRTHDAY_DAY = "";
	private String BIRTHDAY = "";

	//	SharedPreferences mSharedPreferences = getSharedPreferences(myPreference, Activity.MODE_PRIVATE);

	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.dayve_signup);
		
		Log.i(TAG, "onCreate");
		
		// 현재 시간을 가져 온다.
		currentDate = dayveCommon.getCurrentDate();
		
//		String myPreference = "kr.pe.johnkim.dayve.activity_preferences";
		
		SharedPreferences mSharedPreferences = getSharedPreferences(myPreference, Activity.MODE_PRIVATE);
		
		// 설정 파일에 저장된 id, password 를 가져 온다.
		DAYVE_ID = mSharedPreferences.getString("dayve_id", "");
		DAYVE_PASSWORD = mSharedPreferences.getString("dayve_password", "");
		
		mDayveProgressbar = (ProgressBar)findViewById(R.id.mDayveProgressBar);

		btnSignupEnter = (Button)findViewById(R.id.btnSignupEnter);
		btnSignupCancel = (Button)findViewById(R.id.btnSignupCancel);
		btnCheckDuplication = (Button)findViewById(R.id.btnSignupCheckDuplication);
		
		edtTxtSignupId = (EditText)findViewById(R.id.edtTxtSignupId);
		edtTxtSignupPassword1 = (EditText)findViewById(R.id.edtTxtSignupPassword1);
		edtTxtSignupPassword2 = (EditText)findViewById(R.id.edtTxtSignupPassword2);
		edtTxtSignupEmail = (EditText)findViewById(R.id.edtTxtSignupEmail);
		
		txtViewSignupBirthday = (TextView)findViewById(R.id.txtViewSignupBirthday);
		
		// 성별 입력을 위한 Spinner 를 세팅 한다.
		spnSignupSex = (Spinner)findViewById(R.id.spnSignupSex);
		
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sex, android.R.layout.simple_spinner_item);
		
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spnSignupSex.setAdapter(adapter);
		
		/**
		 * 성별 선택 Spinner 를 터치 한다.
		 * MALE, FEMALE, ETC 의 값을 세팅 한다.
		 */
		spnSignupSex.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				
				if(id == 0) {
					SEX = "";
				} else if(id == 1) {
					SEX = "MALE";
				} else if(id == 2) {
					SEX = "FEMALE";
				} else {
					SEX = "ETC";
				}
				
				Log.e(TAG, "position, id : " + position + ", " + id);
				Log.e(TAG, "SEX : " + SEX);
			}

			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		
		btnSignupDatePicker = (Button)findViewById(R.id.btnSignupDatePicker);
		
		// 생년월일 입력을 세팅 한다.
		final Calendar calendar  = Calendar.getInstance();
		
		final DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
			
			public void onDateSet(DatePicker view, int year, int monthOfYear,
					int dayOfMonth) {
				// TODO Auto-generated method stub
				calendar.set(Calendar.YEAR, year);
				calendar.set(Calendar.MONTH, monthOfYear);
				calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
				
				BIRTHDAY_YEAR = year + "";
				BIRTHDAY_MONTH = monthOfYear + 1 + "";
				BIRTHDAY_DAY = dayOfMonth + "";
				
				Log.e(TAG, "birthday : " + BIRTHDAY_YEAR + "." + BIRTHDAY_MONTH + "." + BIRTHDAY_DAY);
				
				txtViewSignupBirthday.setText("");
				txtViewSignupBirthday.setText(
						" " + BIRTHDAY_YEAR + getResources().getString(R.string.signup_year) + 
						BIRTHDAY_MONTH + getResources().getString(R.string.signup_month) + 
						BIRTHDAY_DAY + getResources().getString(R.string.signup_date)
						);
			}
		};
		
		btnSignupDatePicker.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new DatePickerDialog(
						DayveSignupView.this, 
						dateSetListener, 
						calendar.get(Calendar.YEAR), 
						calendar.get(Calendar.MONTH), 
						calendar.get(Calendar.DAY_OF_MONTH)).show();
			}
		});
		
		// id 중복검사 버튼을 터치 한다.
		btnCheckDuplication.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				Log.e(TAG, "check : " + dayveCommon.checkInputCharacter(edtTxtSignupPassword1.getText().toString().trim()));
				
				// 만약 id 가 입력되지 않으면 다이얼로그 창을 띄운다.
				if(("").equals(edtTxtSignupId.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_check_duplication_id_title))
					.setMessage(getResources().getString(R.string.signup_check_duplication_id_message))
					.setPositiveButton(getResources().getString(R.string.signup_check_duplication_id_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else if(!dayveCommon.checkInputCharacter(edtTxtSignupId.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_check_character_id_title))
					.setMessage(getResources().getString(R.string.signup_check_character_id_message))
					.setPositiveButton(getResources().getString(R.string.signup_check_character_id_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else {
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_CHECK_DUPLICATION));
				}
				
//				if(!thread.isAlive()) {
//					if(("0").equals(RESULT_CHECK_DUPLICATION)) {
//						showDialogSuccessIdCheckDuplication();
//					} else if(("1").equals(RESULT_CHECK_DUPLICATION)) {
//						showDialogFailIdCheckDuplication();
//						edtTxtSignupId.setText("");
//					} else {
//						showDialogNullIdCheckDupication();
//						edtTxtSignupId.setText("");
//					}
//				}
			}
			
		});
		
		// 회원가입 버튼을 터치 한다.
		btnSignupEnter.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				if(("").equals(edtTxtSignupId.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_check_enter_id_title))
					.setMessage(getResources().getString(R.string.signup_check_enter_id_message))
					.setPositiveButton(getResources().getString(R.string.signup_check_enter_id_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else if(!dayveCommon.checkInputCharacter(edtTxtSignupId.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_check_again_character_id_title))
					.setMessage(getResources().getString(R.string.signup_check_again_character_id_message))
					.setPositiveButton(getResources().getString(R.string.signup_check_again_character_id_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else if(("").equals(edtTxtSignupPassword1.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_enter_password_title))
					.setMessage(getResources().getString(R.string.signup_enter_password_message))
					.setPositiveButton(getResources().getString(R.string.signup_enter_password_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else if(("").equals(edtTxtSignupPassword2.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_re_enter_password_title))
					.setMessage(getResources().getString(R.string.signup_re_enter_password_message))
					.setPositiveButton(getResources().getString(R.string.signup_re_enter_password_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else if(!(edtTxtSignupPassword2.getText().toString().trim()).equals(edtTxtSignupPassword1.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_not_match_two_password_title))
					.setMessage(getResources().getString(R.string.signup_not_match_two_password_message))
					.setPositiveButton(getResources().getString(R.string.signup_not_match_two_password_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
					
					edtTxtSignupPassword1.setText("");
					edtTxtSignupPassword2.setText("");
				} else if(!dayveCommon.checkInputCharacter(edtTxtSignupPassword2.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_check_character_password_title))
					.setMessage(getResources().getString(R.string.signup_check_character_password_message))
					.setPositiveButton(getResources().getString(R.string.signup_check_character_password_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
					
					edtTxtSignupPassword1.setText("");
					edtTxtSignupPassword2.setText("");
				} else if(("").equals(edtTxtSignupEmail.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_enter_email_title))
					.setMessage(getResources().getString(R.string.signup_enter_email_message))
					.setPositiveButton(getResources().getString(R.string.signup_enter_email_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
					
					edtTxtSignupPassword1.setText("");
					edtTxtSignupPassword2.setText("");
				} else if(!dayveCommon.checkInputEmail(edtTxtSignupEmail.getText().toString().trim())) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_check_email_character_title))
					.setMessage(getResources().getString(R.string.signup_check_email_character_message))
					.setPositiveButton(getResources().getString(R.string.signup_check_email_character_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
					
					edtTxtSignupPassword1.setText("");
					edtTxtSignupPassword2.setText("");
				} else if(("").equals(BIRTHDAY_YEAR)) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_choose_birthday_title))
					.setMessage(getResources().getString(R.string.signup_choose_birthday_message))
					.setPositiveButton(getResources().getString(R.string.signup_choose_birthday_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else if(("").equals(SEX)) {
					new AlertDialog.Builder(DayveSignupView.this)
					.setTitle(getResources().getString(R.string.signup_choose_sex_title))
					.setMessage(getResources().getString(R.string.signup_choose_sex_message))
					.setPositiveButton(getResources().getString(R.string.signup_choose_sex_button_ok), 
						new DialogInterface.OnClickListener() {
							
//							@Override
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
				} else {
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_REGISTER_MEMBER));
				}
				
				/**
				 * 사용자 등록에 성공하면 toast 를 띄운 뒤 main 화면으로 이동하고
				 * 실패하면 다이얼로그 창을 출력하고 재 입력을 기다린다.
				 */
//				if(("SUCCESS").equals(RESULT_REGISTER_MEMBER)) {
//					Toast.makeText(DayveSignupView.this, "새로운 사용자로 등록되었습니다.", Toast.LENGTH_LONG).show();
//					
//					// 설정 파일에 id 와 password 를 저장 한다.
//					SharedPreferences.Editor editor = getPreferences(0).edit();
//					editor.putString("dayve_id", edtTxtSignupId.getText().toString());
//					editor.putString("dayve_password", edtTxtSignupPassword1.getText().toString());
//					editor.commit();
//					
//					// 로그를 저장 한다.
//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_INSERT_LOG));
//					
//					Intent dayveMainView = new Intent(DayveSignupView.this, DayveMainView.class);
//					startActivity(dayveMainView);
//					finish();
//				} else {
//					showDialogFailRegisterMember();
//					
//					edtTxtSignupId.setText("");
//					edtTxtSignupPassword1.setText("");
//					edtTxtSignupPassword2.setText("");
//				}
			}
			
		});
		
		// 가입취소 버튼을 터치 한다.
		btnSignupCancel.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
			
		});
		
		
	}
	
	/**
	 * Handler 를 등록 한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what) {
			// id 중복 검사를 한다.
			case THREAD_CHECK_DUPLICATION : 
				threadMemberCheckDuplication();
				break;
			// 사용자를 등록 한다.
			case THREAD_REGISTER_MEMBER : 
				threadRegisterMember();
				break;
			// 로그를 저장 한다.
			case THREAD_INSERT_LOG : 
				insertLog();
				break;
			// 프로그래스 바를 출력 한다.
			case THREAD_PROGRESS_BAR_VISIBLE : 
				mDayveProgressbar.setVisibility(View.VISIBLE);
				break;
			// 프로그래스 바를 감춘다.
			case THREAD_PROGRESS_BAR_INVISIBLE : 
				mDayveProgressbar.setVisibility(View.INVISIBLE);
				break;
			// 중복 검사 성공 후 사용가능 id 다이얼로그 창을 띄운다.
			case THREAD_DIALOG_CHECK_DUPLICATION_SUCCESS : 
				showDialogSuccessIdCheckDuplication();
				break;
			// 중복 검사 성공 후 이미 등록된 id 다이얼로그 창을 띄운다.
			case THREAD_DIALOG_CHECK_DUPLICATION_FAIL :
				showDialogFailIdCheckDuplication();
				break;
			// 중복 검사 오류발생(통신장애 또는 실행 오류) 다이얼로그 창을 띄운다.
			case THREAD_DIALOG_CHECK_DUPLICATION_OTHERS : 
				showDialogNullIdCheckDupication();
				break;
			// 사용자 등록 실패 다이얼로그 창을 띄운다.
			case THREAD_DIALOG_REGISTER_MEMBER_FAIL : 
				showDialogFailRegisterMember();
				break;
			// 
			case THREAD_DIALOG_SUCCESS_TOAST : 
//				showDialogSuccessToast();
				showLoginToast();
				break;
			}
		}
	};
	
	/**
	 * 사용자 id 중복 검사를 한다.
	 * 
	 * 실제 체크는 checkDuplication 메소드에서 처리한다.
	 * 쓰레드로 돌리기 위한 임시 메소드 이다.
	 * 
	 * @param dayveMember
	 * @return
	 */
	private void threadMemberCheckDuplication() {
		Log.e(TAG, "threadMemberCheckDuplication");
		
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));

		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				memberCheckDuplication();
			}
			
		});
		
		thread.start();
	}
	
	/**
	 * 사용자 id 중복 검사를 한다.
	 */
	private void memberCheckDuplication() {
		Log.e(TAG, "memberCheckDuplication");
		
		DayveMember parameterMember = new DayveMember();
		
		parameterMember.setId(edtTxtSignupId.getText().toString());
		parameterMember.setActivateYn("Y");
		
		Log.e(TAG, "id         : " + parameterMember.getId());
		Log.e(TAG, "activateYn : " + parameterMember.getActivateYn());
		
		try {
			RESULT_CHECK_DUPLICATION = dayveMemberRest.checkDuplication(parameterMember).getCount();
			
			Log.i(TAG, "RESULT_CHECK_DUPLICATION : " + RESULT_CHECK_DUPLICATION);
			
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
		}
		
		/**
		 * 중복 검사 결과에 따라 다이얼로그 창을 띄운다.
		 */
		if(("0").equals(RESULT_CHECK_DUPLICATION)) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_DIALOG_CHECK_DUPLICATION_SUCCESS));
		} else if(("1").equals(RESULT_CHECK_DUPLICATION)) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_DIALOG_CHECK_DUPLICATION_FAIL));
			/**
			 * Thread 에서 정의한 메소드가 아닌 이곳에서 
			 * 직접 입력란을 비우려고 시도하면 Thread 오류가 발생한다.
			 * 
			 * 직접 UI 수정을 위한 시도 금지.
			 */
//			edtTxtSignupId.setText("");
		} else if(("null").equals(RESULT_CHECK_DUPLICATION)) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_DIALOG_CHECK_DUPLICATION_OTHERS));
		} else if(("ERROR").equals(RESULT_CHECK_DUPLICATION)) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_DIALOG_CHECK_DUPLICATION_OTHERS));
		}
	}
	
	/**
	 * 이미 등록된 id 일 경우 다이얼로그를 출력 한다.
	 * 
	 * thread 메소드에서 호출하기 때문에 thread 에 등록해서 사용한다.
	 * 
	 * 확인 버튼을 터치해서 프로그래스 바를 중지 시킨다.
	 * 
	 * id 입력란을 비운다.
	 */
	private void showDialogFailIdCheckDuplication() {
		Log.e(TAG, "showDialogFailIdCheckDuplication");
		
		new AlertDialog.Builder(DayveSignupView.this)
		.setTitle(getResources().getString(R.string.signup_already_exist_id_title))
		.setMessage(getResources().getString(R.string.signup_already_exist_id_message))
		.setPositiveButton(getResources().getString(R.string.signup_already_exist_id_button_ok), 
			new DialogInterface.OnClickListener() {
				
//				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
				}
			}).show();
		
		edtTxtSignupId.setText("");
	}
	
	/**
	 * 사용할 수 있는 id 일 경우 다이얼로그를 출력 한다.
	 * 
	 * thread 메소드에서 호출하기 때문에 thread 에 등록해서 사용한다.
	 * 
	 * 확인 버튼을 터치해서 프로그래스 바를 중지 시킨다.
	 */
	private void showDialogSuccessIdCheckDuplication() {
		Log.e(TAG, "showDialogSuccessIdCheckDuplication");
		
		
		new AlertDialog.Builder(DayveSignupView.this)
		.setTitle(getResources().getString(R.string.signup_available_id_title))
		.setMessage(getResources().getString(R.string.signup_available_id_message))
		.setPositiveButton(getResources().getString(R.string.signup_available_id_button_ok), 
			new DialogInterface.OnClickListener() {
				
//				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
				}
			}).show();
	}
	
	/**
	 * id 중복 확인에 실패할 경우 다이얼로그를 출력 한다.
	 * 
	 * thread 메소드에서 호출하기 때문에 thread 에 등록해서 사용한다.
	 * 
	 * 확인 버튼을 터치해서 프로그래스 바를 중지 시킨다.
	 */
	private void showDialogNullIdCheckDupication() {
		Log.e(TAG, "showDialogNullIdCheckDupication");
		
		new AlertDialog.Builder(DayveSignupView.this)
		.setTitle(getResources().getString(R.string.signup_fail_check_duplication_id_title))
		.setMessage(
				getResources().getString(R.string.signup_fail_check_duplication_id_message_01) + 
				"\n" + 
				getResources().getString(R.string.signup_fail_check_duplication_id_message_02)
				)
		.setPositiveButton(getResources().getString(R.string.signup_fail_check_duplication_id_button_ok), 
			new DialogInterface.OnClickListener() {
				
//				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
				}
			}).show();
	}
	
	/**
	 * 사용자를 등록 한다.
	 * 실제 등록은 registerMember 메소드에서 처리 한다.
	 * 쓰레드로 돌리기 위한 임시 메소드이다.
	 */
	private void threadRegisterMember() {
		Log.i(TAG, "threadRegisterMember");
		
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));
		
		new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				registerMember();
			}
			
		}).start();
	}
	
	/**
	 * 사용자를 등록 한다.
	 * 
	 * 사용자 등록에 성공하면 main 페이지로 이동 한다.
	 * 
	 * @param dayveMember
	 * @return
	 */
	private void registerMember() {
		Log.i(TAG, "registerMember");
		
		try {
			// 개월이나 날짜가 한자리일 경우 두자리로 만들어 준다.
			if(BIRTHDAY_MONTH.length() == 1) {
				BIRTHDAY_MONTH = "0" + BIRTHDAY_MONTH;
			}
			
			if(BIRTHDAY_DAY.length() == 1) {
				BIRTHDAY_DAY = "0" + BIRTHDAY_DAY;
			}
			
			// 생년월일을 조합 한다.
			BIRTHDAY = BIRTHDAY_YEAR + "-" + BIRTHDAY_MONTH + "-" + BIRTHDAY_DAY;
			
			DayveMember parameterMember = new DayveMember();
			
			parameterMember.setId(edtTxtSignupId.getText().toString());
			parameterMember.setPassword(edtTxtSignupPassword2.getText().toString());
			parameterMember.setEmail(edtTxtSignupEmail.getText().toString().trim());
			parameterMember.setOpenEmailYn("N");
			parameterMember.setMobilePhoneNumber("");
			parameterMember.setOpenMobilePhoneYn("N");
			parameterMember.setCountry("");
			parameterMember.setOpenCountryYn("N");
			parameterMember.setHomePage("");
			parameterMember.setOpenHomePageYn("N");
			parameterMember.setNickName(edtTxtSignupId.getText().toString());
			parameterMember.setOpenNickNameYn("N");
			parameterMember.setProfileImageUrl("");
			parameterMember.setOpenProfileImageYn("N");
			parameterMember.setFacebookId("");
			parameterMember.setFacebookPassword("");
			parameterMember.setOpenFacebookYn("N");
			parameterMember.setTwitterId("");
			parameterMember.setTwitterPassword("");
			parameterMember.setOpenTwitterYn("N");
			parameterMember.setBirthday(BIRTHDAY);
			parameterMember.setSex(SEX);
			parameterMember.setMileage("0");
			parameterMember.setLevel("5");
			parameterMember.setActivateYn("Y");
			parameterMember.setModifyDate(currentDate);
			parameterMember.setRegisterDate(currentDate);
			
			Log.e(TAG, "id           : " + parameterMember.getId());
			Log.e(TAG, "password     : " + parameterMember.getPassword());
			Log.e(TAG, "activate     : " + parameterMember.getActivateYn());
			Log.e(TAG, "modifyDate   : " + parameterMember.getModifyDate());
			Log.e(TAG, "registerDate : " + parameterMember.getRegisterDate());
			
			RESULT_REGISTER_MEMBER = dayveMemberRest.registerMember(parameterMember).getResult();
			
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
			
			Log.i(TAG, "RESULT_REGISTER_MEMBER : " + RESULT_REGISTER_MEMBER);
			Log.i(TAG, "Success to register Member.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
			
			Log.e(TAG, "Fail to register Member.");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
			
			Log.e(TAG, "Fail to register Member.");
		}
		
		// 사용자 등록에 성공하면 id, password 를 설정 파일에 저장 한다.
		if(("SUCCESS").equals(RESULT_REGISTER_MEMBER)) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_DIALOG_SUCCESS_TOAST));
			
			// 설정 파일에 id 와 password 를 저장 한다.
			SharedPreferences mSharedPreferences = getSharedPreferences(myPreference, Activity.MODE_PRIVATE);
			
			SharedPreferences.Editor editor = mSharedPreferences.edit();
			editor.putString("dayve_id", edtTxtSignupId.getText().toString());
			editor.putString("dayve_password", edtTxtSignupPassword1.getText().toString());
			editor.commit();
			
			DAYVE_ID = mSharedPreferences.getString("dayve_id", "");
			DAYVE_PASSWORD = mSharedPreferences.getString("dayve_password", "");
			
			Log.i(TAG, "dayve_id       : " + mSharedPreferences.getString("dayve_id", ""));
			Log.i(TAG, "dayve_password : " + mSharedPreferences.getString("dayve_password", ""));
			
			// 로그를 저장 한다.
//			mHandler.sendMessage(mHandler.obtainMessage(THREAD_INSERT_LOG));
			
			/**
			 * 로그를 저장 한다.
			 * main thread 에서 background child thread 를 호출 한다.
			 */
			Thread thread = new Thread(null, doBackgroundThreadProcessing, "Background_insertLog");
			thread.start();
			
			// main 화면으로 이동 한다.
			Intent dayveMainView = new Intent(DayveSignupView.this, DayveMainView.class);
			startActivity(dayveMainView);
			finish();
		} else {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_DIALOG_REGISTER_MEMBER_FAIL));
		}
	}
	
	/**
	 * 사용자 등록에 실패하면 다이얼로그를 출력 한다.
	 * 
	 * thread 메소드에서 호출하기 때문에 thread 에 등록해서 사용한다.
	 * 
	 * 다시 등록하기 위해서 id, password 입력란을 비운다.
	 */
	private void showDialogFailRegisterMember() {
		new AlertDialog.Builder(DayveSignupView.this)
		.setTitle(getResources().getString(R.string.signup_fail_register_id_title))
		.setMessage(
				getResources().getString(R.string.signup_fail_register_id_message_01) + 
				"\n" + 
				getResources().getString(R.string.signup_fail_register_id_message_02)
				)
		.setPositiveButton(getResources().getString(R.string.signup_fail_register_id_button_ok), 
			new DialogInterface.OnClickListener() {
				
//				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
				}
			}).show();
		
//		edtTxtSignupId.setText("");
//		edtTxtSignupPassword1.setText("");
//		edtTxtSignupPassword2.setText("");
	}
	
	/**
	 * 사용자 등록을 성공하면 toast 를 띄운다.
	 * 
	 * thread 메소드에서 호출하기 때문에 thread 에 등록해서 사용한다.
	 */
	private void showDialogSuccessToast() {
		Toast.makeText(DayveSignupView.this, getResources().getString(R.string.signup_success_register_id), Toast.LENGTH_LONG).show();
	}
	
	/**
	 * Toast 를 띄운다.
	 */
	private void showLoginToast() {
		CharSequence text = "새로운 사용자로 등록되었습니다";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
	
	/**
	 * 사용자 등록을 마치고 나면 로그를 저장 한다.
	 */
	private void insertLog() {
		Log.i(TAG, "insertLog");
		
		DayveLog dayveLog = new DayveLog();
		
		dayveLog.setId(DAYVE_ID);
		dayveLog.setViewName(TAG);
		dayveLog.setAccessDate(currentDate);
		
		try {
			dayveCommonRest.registerLog(dayveLog);
			Log.i(TAG, "Success to insert log.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, "Fail to insert log.");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, "Fail to insert log.");
		}
	}
	
	/**
	 * 로그 저장은 UI 와 관계 없기 때문에 background child thread 로 구현 함
	 */
	private Runnable doBackgroundThreadProcessing = new Runnable() {
		
		public void run() {
			// TODO Auto-generated method stub
			insertLog();
		}
	};

	/* (non-Javadoc)
	 * @see android.app.Activity#onStop()
	 */
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
				
		finish();
	}
	
	
	
}
